#ifndef CLIENTE_H_
#define CLIENTE_H_

#include "../utils/Log.h"
#include "../utils/FuncionesComunes.h"
#include "../process/Semaforo.h"
#include "../process/SIGINT_Handler.h"
#include "../process/SignalHandler.h"
#include "../process/ClientSocket.h"
#include "Fifo.h"
#include "Conversacion.h"
#include "Mensaje.h"

#include <vector>
#include <string>
#include <wait.h>

#define ARCHIVO_SEMAFORO "../process/Semaforo.cpp"
#define BUFFSIZE 100

using namespace std;

class Cliente {
private:
	Fifo *canalServidor;
	Fifo *canalCliente;
	int id;
	int idConversacion;
	string nombre;
	string nombreConversacion;
	bool tieneConversacion;
	string pathFifo;

	//Conversacion conversacion;
	Log log;
	Semaforo sem;
	SIGINT_Handler sigint_handler;

	void escribirLog(string mensaje);

	void nuevaConversacion();
	void empezarConversacion();
	void unirseAConv(int id);
	void mostrarConvDisp();
	void mostrarUsuarios();

	void conectarConServidor();
	void desconectarConServidor();

	void escribirMensajes();
	void leerMensajes();

public:
	Cliente(string nombre);
	void ejecutar();
	void abandonarConversacion();
	void unirseConversacion();
	void activarModoDebug(bool activar);
	virtual ~Cliente();
};

#endif /* CLIENTE_H_ */
